/*****************************************************
	Nome: 		VISED MED Module
	Versão:		3.6

	Funcionalidades:
	- Cálculo de forças
	- Integração Temporal

 *****************************************************/

#if !defined (MED_MODULE_INCLUDED)
#define MED_MODULE_INCLUDED

#include "DEFS.H"
#include "../colisao/detColisao.h"
#include "../integracao/Integracao.h"

class CORE;
class MODEL;
class CDET;
class SPHERE;
class LINE;
class ForcaInteracao;
class ForcasIndependentes;
class ForcaMolas;
class Fronteira;
class Restricoes;
class DetecColisao;
class Integracao;
class ScreeningMola;

class MED {

    private:
            int OrganizaPonteirosMolas();
            void OrganizaPonteirosEsferas(int);
            int CalculaMenorMaiorElementos();
            void EscolhaIntegracao();
            void EscolhaColisao();
            void EscolhaCampo();
            void EscolhaMolas();
            void IniciaFronteira();
            void IniciaForcasIndependentes();
            void IniciaRestricoes();

	public:

            ForcaInteracao *contato;
            ForcaInteracao *campoForca;
            ForcasIndependentes *forcasIndependentes;
            Fronteira *fronteira;
            Restricoes *restricoes;
            ForcaMolas *molas;
            DetecColisao *DetContatoEsferas;
            DetecColisao *calculoCampoForca;
            DetecColisao *colisaoLinhasEsferas;
            Integracao *integracao;
            REAL min_rad,max_rad;
            char qualOpcMola;
            char qualIntegracao;
            char qualDetCol;
            char qualDetCampo;
            int numeroThreads;
            bool tudoSeq;
            bool intSeq;
            bool detSeq;
            bool indepSeq;
            bool frontSeq;
            bool restrSeq;

            CORE* pCore;					// Núcleo associado
            MODEL* pModel;					// Modelo associado

            bool IsActive;

            REAL Critical_dT;				// Precisão recomendada

            MED();

            void Initialize( CORE* core );
            void Terminate();
            void CalculaForcas();
            void CalculaForcasExternas();
            void Integra();
            void FuncoesDeResolucao(); //Funções que serão executadas a cada tempo de resolução
            inline void Imprime(const char*,const char*,const char*);
            inline void Imprime(const char*,const char*);

};

	#endif	// MED_MODULE_INCLUDED
